package com.ufaud.ais.pub.utils;

import java.util.Set;
import java.util.TreeSet;

public class SetUtil {

	private SetUtil() {
	}

	/**
	 * 功能: 取得一个能以集合元素的指定字段排序的Set
	 * @author 林可  2010-9-1 下午01:54:23
	 * @param <T> 元素的泛型
	 * @param orderField 排序字段名
	 * @return
	 */
	public static <T> Set<T> getSetOrderedByBeanProperty(String orderField) {
		return getSetOrderedByBeanProperty(orderField, false, false);
	}

	/**
	 * 功能: 取得一个能以集合元素的指定字段排序的Set
	 * @author 林可  2010-9-1 下午01:57:44
	 * @param <T> 元素的泛型
	 * @param orderField 排序字段名
	 * @param isInverse 是否反转默认顺序（一般都是转为降序），默认为false
	 * @param nullsAreHigh 若字段为空值，是否为大，默认为false
	 * @return
	 */
	public static <T> Set<T> getSetOrderedByBeanProperty(String orderField, boolean isInverse, boolean nullsAreHigh) {
		return getSetOrderedByBeanProperty(new String[] { orderField }, new boolean[] { isInverse }, new boolean[] { nullsAreHigh });
	}
	
	/**
	 * 功能: 取得一个能以集合元素的一系列字段排序的Set
	 * @author 林可  2010-9-1 下午01:58:08
	 * @param <T> 元素的泛型
	 * @param propertyNames 排序字段名
	 * @return
	 */
	public static <T> Set<T> getSetOrderedByBeanProperty(String[] propertyNames) {
		return getSetOrderedByBeanProperty(propertyNames, null, null);
	}

	/**
	 * 功能: 取得一个能以集合元素的一系列字段排序的Set
	 * @author 林可  2010-9-1 下午01:58:08
	 * @param <T> 元素的泛型
	 * @param propertyNames 排序字段名
	 * @param arr_isInverse 是否反转默认顺序（一般都是转为降序），默认都为false
	 * @param arr_nullsAreHigh 若字段为空值，是否为大，默认都为false
	 * @return
	 */
	public static <T> Set<T> getSetOrderedByBeanProperty(String[] propertyNames, boolean[] arr_isInverse, boolean[] arr_nullsAreHigh) {
		return new TreeSet<T>(ComparisonUtil.<T>getBeanPropertyComparator(propertyNames, arr_isInverse, arr_nullsAreHigh));
	}
}
